싱글톤 패턴
싱글톤 패턴
싱글톤 패턴이란 소프트웨어 디자인 패턴의 생성 패턴 중 하나이다. 싱글톤 패턴을 사용하게 되면 '생성자가 여러번 호출되더라도 객체는 최초 한번만 생성되고 그 이후에는 최초의 생성자가 생성한 객체를 리턴'하게 된다. 주로 DBCP(DataBase Connection Pool)와 같이 공통된 객체를 여러개 생성해서 사용하는 상황에 많이 사용이 된다.
안드로이드 앱 같은 경우 각 액티비티나 클래스 별로 주요 클래스들을 일일이 전달하기가 번거로워서 싱글톤 클래스를 사용하는 것이 편하다.
싱글톤 패턴 구현
자바로 구현한 싱글톤 패턴 예시입니다.
public class SingletonObj {
private static SingletonObj singletonObj = null;
private SingletonObj(){ }
public static SingletonObj getInstance(){
if( singletonObj == null ){
singletonObj = new SingletonObj();
}
return singletonObj;
}
}
외부에서 직접 생성하지 못하도록 생성자를 private로 선언해야 합니다. 객체가 할당되어 있으면 그것을 반환하고, 할당되어 있지 않으면 새로운 객체를 할당하는 getInstance라는 메소드를 만듭니다.
public static void main(String args[]){
for( int i = 0; i < 5; i++ ){
SingleObj obj = SingleObj.getInstance();
System.out.println(obj.toString());
}
}
하나의 객체만 호출하는지 확인해본다.
아래와 같이 하나의 객체만 호출이 되는 것을 확인할 수 있다.
싱글톤 패턴의 장단점
장점
- 메모리 낭비를 방지할 수 있다.
- 싱글톤 객체를 사용 안하는 경우 인스턴스를 생성하지 않는다.
- 인스턴스가 한개만 존재하기에 개발할 때 실수를 줄일 수 있다.
- 두번째 이용시부터는 객체 로딩시간이 현저하게 줄어들어 성능이 좋아진다.
단점
전역변수보다 사용하기 불편하다.
싱글톤의 역할이 커질수록 결합도가 높아져 객체 지향 설계 원칙에 어긋날 수 있다.
멀티쓰레드 환경에서 컨트롤이 어렵다.
tip
인스턴스를 만드는 메서드에 동기화하는 방법과 정적 변수에 인스턴스를 만들어 바로 초기화하는 방법을 통하여 멀티쓰레드 환경에서 싱글톤 문제를 해결 할 수 있다.
나올 수 있는 면접 질문
언제 싱글톤 패턴을 사용하면 좋을까?
- 안드로이드 앱을 제작할 때 각 액티비티나 클래스 별로 주요 클래스들을 일일이 전달하기가 번거로울때
싱글톤 패턴을 사용하는 이유는 무엇인가?
- 한번도 사용하지 않으면 인스턴스를 생성하지 않는다.
- 두번째 이용시부터는 객체 로딩시간이 현저하게 줄어들어 성능이 좋아진다.
참고 url
기여자
HelloNaks
📦